#include<bits/stdc++.h>
using namespace std;
bool plaindrome(vector<int>&v,int n){
int a = n/2;
for(int i =0;i<a;i++){
if(v[i]!=v[n-i-1])
return false;
}
return true;
}
int main(){
int t;
cin>>t;
while(t--){
int n;
cin>>n;
vector<int>v;
for(int i =0;i<n;i++){
int x;
cin>>x;
v.push_back(x);
}
if(n==2){
cout<<"YES"<<endl;
continue;
}
unordered_map<int,int>mp;
for(int i =0;i<n;i++){
mp[v[i]]++;
}
vector<int>a,b,c,d;
if(v[0]!=v[n-1]){
if((mp[v[0]]==1)&&(mp[v[n-1]]==1)){
cout<<"NO"<<endl;
continue;
}
if((mp[v[0]]>1) || (mp[v[n-1]]>1)){
for(int i =0;i<n;i++){
if(v[i]!=v[0]){
a.push_back(v[i]);
}
if(v[i]!=v[n-1]){
b.push_back(v[i]);
}
}
if(plaindrome(a,a.size())||plaindrome(b,b.size())) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
continue;
}
}
else {
int flag =0;
int p =0,q=0;
int i =0 , j = n-1;
while(i<j){
if(v[i]==v[j]){
i++;
j--;
}
else{
p= v[i];
q = v[j];
flag = 1;
break;
}
}
if(flag==0){
cout<<"YES"<<endl;
continue;
}
for(int i =0;i<n;i++){
if(v[i]!=p){
c.push_back(v[i]);
}
if(v[i]!=q) d.push_back(v[i]);
}
if(plaindrome(c,c.size())||plaindrome(d,d.size())) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
continue;
}
}
}
155A - I_love_username | 49A - Sleuth |
1541A - Pretty Permutations | 1632C - Strange Test |
673A - Bear and Game | 276A - Lunch Rush |
1205A - Almost Equal | 1020B - Badge |
1353A - Most Unstable Array | 770A - New Password |
1646B - Quality vs Quantity | 80A - Panoramix's Prediction |
1354B - Ternary String | 122B - Lucky Substring |
266B - Queue at the School | 1490A - Dense Array |
1650B - DIV + MOD | 1549B - Gregor and the Pawn Game |
553A - Kyoya and Colored Balls | 1364A - XXXXX |
1499B - Binary Removals | 1569C - Jury Meeting |
108A - Palindromic Times | 46A - Ball Game |
114A - Cifera | 776A - A Serial Killer |
25B - Phone numbers | 1633C - Kill the Monster |
1611A - Make Even | 1030B - Vasya and Cornfield |